home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1997 August / Macworld (1997-08).dmg / Serious Demos / Crimson Demo / Crimson Basic Manual / Crimson Basic Manual.rsrc / TEXT_1200_Programming.txt < prev    next >
Text File  |  1997-06-17  |  14KB  |  332 lines

  1.     
  2. Programming
  3.  
  4. Variables    
  5.  
  6. The standard Basic variable types of Integer, String and Float are available for normal use within a program.
  7.  
  8. Integer
  9. a 32 bit signed Integer
  10.  
  11. String  [len]
  12. a Basic string implemented as a 16 bit length followed by the string itself.
  13. Only fixed length strings are supported in this version.
  14.  
  15. Float
  16. an 80 bit floating point number implemented using the Apple SANE libraries.
  17.  
  18. Additionally, Pascal type variables may be used for communication with the Macintosh Toolbox.
  19.  
  20. Byte
  21. an 8 bit unsigned value
  22.  
  23. Word
  24. a 16 bit signed value
  25.  
  26. Char [len]
  27. a fixed length string of characters
  28.  
  29. Str255 [len]
  30. a pascal string consisting of an 8 bit length followed by the string.
  31.  
  32. A structure type construct is provided for toolbox communication and for creating structured records for use in Random file access. (See GET and PUT).
  33.  
  34. Variables may have a LOCAL or GLOBAL scope. The examples below demonstrate the usage of the different variable types available.
  35.  
  36. Global Myint As Integer
  37. Local Mystr As String [30]               .. maximum length=30 characters.
  38. Global Mybyte As Byte
  39. Local Myword As Word
  40. Global Mychar As Char [20]              .. fixed length= 20 characters.
  41. Local Mypstring As Str255 [10]       .. maximum length=10 characters.
  42.  
  43. Local Mystruct As Structure
  44.         Local Myint As Integer
  45.         Local Mystr As String [10]
  46. Endstruct 
  47.  
  48. Arrays    
  49.  
  50. Arrays may have up to 3 dimensions in this version of the compiler and are dynamic in the sense that the size of an array can be changed at any time.
  51. Arrays are given an initial dimension when declared with the GLOBAL or LOCAL statements and are resized with the REDIM statement.
  52. The contents of an array may be saved and subsequently loaded between program invocations using the ARRAYLOAD and ARRAYSAVE statements. The contents of saved arrays are stored at DATA type resources in the applications resource file.
  53. The maximum number of elements which can be stored in an array is 65000.
  54.  
  55. Arithmetic Functions and Commands    
  56.  
  57. The following arithmetic functions are supported:
  58.  
  59.         +        Add
  60.         -        Subtract or unary minus
  61.         *        Multiply
  62.         /        Divide
  63.  
  64. Additionally, the ADD and SUB commands may be used where an integer expression needs to be add to or subtracted from a variable and the INC and DEC commands provide a quick way to Increment or Decrement the value of an integer variable.  
  65.  
  66. Logical Operators    
  67.  
  68. The logical operators AND, OR, NOT and XOR (Exclusive OR) are available for use in arithmetic and conditional expressions.
  69. A logical TRUE yields a result of -1 whereas a logical FALSE yields a result of zero.
  70.  
  71. Comparison Functions    
  72.  
  73. Comparison functions, together with Logical Operators, resolve an expression down to a TRUE or FALSE value. The following comparison functions are implemented :-
  74.  
  75.         >                Greater than
  76.         <                Less than
  77.         =                Equal to
  78.         <> or !=       Not equal to
  79.         >= or =>      Greater than or equal to
  80.         <= or =<      Less than or equal to
  81.  
  82. Program Flow    
  83.  
  84. Several standard Basic constructs are available for controlling program flow :
  85.  
  86. The FOR / NEXT loop which steps through the loop a fixed number of times changing the value of a variable each time it passes through the loop.
  87.  
  88. FOR <variable name> = <start expression> TO <end expression> [STEP <expression>]
  89.         statements
  90. NEXT
  91.  
  92. The variable is initially set to <start expression> and each time through the loop, the STEP <expression> is added to it until it reaches the value of the ,end expression>. The STEP parameter defaults to 1.
  93.  
  94. The REPEAT construct loops until a condition is met.
  95.  
  96.         REPEAT
  97.             statements
  98.         UNTIL <conditional expression>
  99.  
  100. REPEAT always executes the statements between the REPEAT and UNTIL at least once.
  101.  
  102. The WHILE contruct also loops until a condition is met but in this case the condition is tested at the beginning of the loop.
  103.  
  104.         WHILE <conditional expression>
  105.             statements
  106.         WEND
  107.  
  108. The DO CASE construct allows multiple conditions to be tested and different actions to be taken according to the results..
  109.  
  110.         DO CASE
  111.                 CASE <conditional expression>
  112.                     statements
  113.                     [BREAK}
  114.                 CASE ......
  115.                 DEFAULT
  116.                     statements
  117.         ENDCASE
  118.  
  119. The conditional expression after each CASE statement is evaluated and program flow continues if the condition is found to be true. The BREAK statement forces execution to continue after the ENDCASE statement. The DEFAULT condition is met if no BREAK statements are encountered.
  120.  
  121. The IF / THEN / ELSE / ENDIF construct is implemented.
  122.  
  123.         IF <conditional expression> [THEN]
  124.                 statements
  125.         [ELSE]
  126.                 statements
  127.         ENDIF
  128.  
  129. The THEN keyword is optional and is retained for compatibility.
  130.  
  131. The GOTO keyword is also supported for completeness.
  132.  
  133.         GOTO <label>
  134.  
  135. A label may be any string of characters terminated by a colon. The label to which a GOTO is referenced must be in the same function or procedure as the GOTO statement itself.
  136.  
  137. Procedures / Functions    
  138.  
  139. Procedures implement subroutines within a program. A procedure may be invoked using the DO <procname> statement. i.e.
  140.  
  141.         DO <procname> [(<parameter>,<parameter> ....)]
  142.  
  143. The parameters with the PROCEDURE statement must match those passed by the DO statement in both number and data type although, of course, the names may be different. Each parameter is further described by a PARAMETER statement. For example:
  144.  
  145. GLOBAL Mystr AS STRING [30]
  146. GLOBAL Myint AS INTEGER
  147.         DO Myproc(Mystr,Myint)
  148.         .........
  149.         END
  150.  
  151. PROCEDURE Myproc(Parm1,Parm2)
  152. PARAMETER Parm1 AS STRING
  153. PARAMETER Parm2 AS INTEGER
  154.         .........
  155. RETURN
  156.  
  157. Functions are similar to procedures except that they return data to the caller. Example:
  158.  
  159. GLOBAL Mystr AS STRING [30]
  160. GLOBAL Myint AS INTEGER
  161.  
  162.         Myint=Myfunc(Mystr)
  163.         .......
  164.         END
  165.  
  166. FUNCTION Myfunc(Parm1) RETURNING INTEGER
  167. PARAMETER Parm1 AS STRING
  168. LOCAL Retval As INTEGER
  169.         Retval=VAL(Parm1)
  170.         .....
  171. RETURN Retval
  172.  
  173. Local variables may be used for temporary storage in either Functions or Procedures. There contents are lost whenever the Function or Procedure terminates.
  174.  
  175. By default, all data passed to functions and procedures is passed by Value. It is possible to pass data by Reference allowing the function or procedure to change its value.
  176.  
  177. Global Myint As INTEGER
  178.         Myint=1
  179.         DO MyProc(BYREF(Myint)
  180.         PRINT Myint
  181.         END
  182.  
  183. Procedure Myproc(Parm1)
  184. PARAMETER Parm1 As INTEGER BYREF
  185.         Parm1=Parm1*2
  186. RETURN
  187.  
  188. In the above example, 2 would be printed on the console.
  189.  
  190. Normally, a function or procedure is only visible with the program module which it resides. To make a function or procedure globally visible across all program modules, the PUBLIC keyword is used.
  191.  
  192. PROCEDURE Myproc(Parm1) PUBLIC
  193. FUNCTION Myfunc(Parm1) RETURNING STRING PUBLIC
  194.  
  195. Procedures which trap events, eg.
  196.         Procedure MyForm.MyControl.Click()
  197. are treated as Public by default.
  198.  
  199. Disk I/O    
  200.  
  201. Disk files may be opened for Input, Output, Append or Random. 
  202. In Input mode data is read sequentially from the beginning of the file until the end. 
  203. In Output mode data is written from the beginning of the file with the file growing as necessary to accommodate the data.
  204. In Append mode, data is added onto the end of an existing file.
  205. In Random mode, data may be read or written to any record within the file.
  206.  
  207. Files are opened with either the OPEN or FSOPEN commands. The OPEN command takes a filename, or full path name as a parameter to be used to locate the file.
  208. The FSOPEN command uses a standard System 7 file system spec (FSSPEC) to locate the file. 
  209.  
  210. In Input, Output or Append mode, data is accessed sequentially by either reading or writing the value of variables (with INPUT# and WRITE#) or as text data (with LINE INPUT # and PRINT#). The End of File condition can be detected in Input mode by use of the EOF( function.
  211.  
  212. In Random mode data is accessed by record number using PUT# and GET#.
  213.  
  214. Files are closed by using the CLOSE verb.
  215.  
  216. The Toolbox    
  217.  
  218. Crimson Basic has the capability to support all Macintosh Toolbox calls by means of inbuilt definitions of the input and output parameters required.
  219. In order to support calls to the Toolbox interface, Pascal data types are supported. These are :
  220.  
  221.         Byte         .. an unsigned 8 bit value of type Boolean.
  222.         Word        .. a 16 bit signed Integer.
  223.         Char         .. a string of characters of fixed length.
  224.         Str255     .. a single byte length field followed by a string.
  225.  
  226. Toolbox calls may be used within any expression and are identified by the compiler by prefixing the name of the toolbox call with an underscore character. eg.
  227.  
  228. Global MyWindow As Integer
  229.         ..........
  230.         _ShowWindow(MyWindow)
  231.  
  232. Global Retval As Word
  233. Global Filename As Str255
  234.         ............
  235.         Retval=_OpenResFile(Filename)
  236.  
  237. Many of the commonly used Toolbox calls are pre-defined within the compiler. Additional ones may be added by using the TDL (Toolbox Definition Language) compiler which is supplied with this package. (see separate section).
  238.  
  239. Comments    
  240.  
  241. A comment line is recognised as a line with an * character in the first non space position with a line.
  242.  
  243. Comments may be added after a statement following an ' character. eg.
  244.  
  245.         A=b+c*d   ' this is a comment
  246.  
  247. Menus    
  248.  
  249. The Macintosh environment supports a single menu for the entire application unlike some other systems, which have a separate menu for each window.
  250.  
  251. To create a menu, use the INITMENU command, which sets up a new menu bar with an Apple menu within it, with a menu_id of 128.
  252.  
  253. If you wish to add an 'About' item to the Apple menu, use the ABOUTMENU function. For example :
  254.  
  255. AboutId=AboutMenu("About My Application")
  256.  
  257. .. creates a menu item under the Apple menu with the caption "About My Application" and assigns its menu item id to the variable AboutId.
  258.  
  259. Normally, when the user selects the About menu item your application should display a message box containing brief details of your application as shown in the example below.
  260.  
  261. To add a menu to the menu bar, use the ADDMENU function. e.g
  262.  
  263. FileMenu=AddMenu("File")
  264.  
  265. .. adds a new menu to the menu bar with a caption of "File" and assigns the menu id of this menu to the variable FileMenu.
  266.  
  267. To add a menu item to an existing menu, use the ADDMENUITEM function. e.g.
  268.  
  269. QuitItem=AddmenuItem(FileMenu,"Quit","Q")
  270.  
  271. .. adds a menu item with a caption of "Quit" to an existing menu with a menu id contained in the FileMenu variable, assigns a keyboard equivalent of "Q" to the menu item and assigns the value of the menu item id to the variable QuitItem.
  272.  
  273. User events associated with menus are reported to the application via the OnMenu event. OnMenu events are reported to the form which is currently Active (in front).
  274. Menu related events are reported to each Form individually as the context of a menu item is likely to vary from form to form (for example, the processing associated with "Quit" may well be different from form to form).
  275. e.g.
  276.  
  277.     Procedure Form1.OnMenu(menu_id,menu_item_id)
  278.     Parameter menu_id As Integer
  279.     Parameter menu_item_id As Integer
  280.     Local WhichButton As Integer
  281.       Do Case
  282.         Case menu_id=128                   ' Apple Menu
  283.           If menu_item_id=AboutId
  284.             WhichButton=MsgBox("My Application is Great","OK","")
  285.           Endif
  286.         Case menu_id=FileMenu             ' File Menu
  287.           Do Case
  288.         Case menu_item_id=QuitItem   ' Quit menu item
  289.           End
  290.         Case menu_item_id=  etc.
  291.       Endcase
  292.     Endcase
  293.     Return
  294.  
  295. Different forms will require different menu items to be available for the user to select (enabled or disabled). The ENABLEMENU and DISABLEMENU commands are provided for this purpose. 
  296.  
  297. The DISABLEMENU command sets a menu or menu item to a disabled status (with dimmed appearance) and makes it impossible to select this item. e.g.
  298.  
  299.     DisableMenu FileMenu,QuitItem
  300.  
  301. The ENABLEMENU command has the opposite effect and enables the item.
  302.  
  303. To ensure that the menu reflects the desired menu settings appropriate to the currently active form, the forms GotFocus event may be used in applications which have more than one form. e.g.
  304.  
  305.     Procedure Form1.GotFocus()
  306.       DisableMenu FileMenu,QuitItem
  307.       EnableMenu FileMenu,NewItem
  308.     Return
  309.  
  310. The GotFocus event will be fired whenever the user clicks on a form thus making this form the current form.
  311.  
  312. The ERR variable    
  313.  
  314. The ERR variables is set after a file I/O operation.
  315.  
  316. Negative values are as defined in the Inside Macintosh Files volumes.
  317.  
  318. The positive values reported are :
  319.     100 - Invalid file number
  320.     101 - Invalid data found by INPUT#
  321.     102 - File I/O operation is inconsistent with open mode
  322.     103 - Invalid record number in PUT or GET
  323.  
  324. The Console    
  325.  
  326. The console provides a method of providing keyboard input and output facilities to the user although the use of Forms is much prefered. The Console should be used only for debugging purposes.
  327. A Console window is opened with the OPEN CONSOLE command.
  328. The PRINT command will output text to the console (and open the console if it is not already open).
  329. The CLS command will clear the contents of the console.
  330. The CLOSE CONSOLE command will close a console.
  331. The INKEY command waits for keyboard input within the console and continues program execution after a key is pressed.
  332.